package com.lisp.springframework.web.controller;

import java.time.Instant;
import java.util.concurrent.TimeUnit;

import org.springframework.http.CacheControl;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class CacheControlController {
    
	/** ResponseBody和@ResponseBody基本一样，但可以额外添加响应头 */
	@RequestMapping("/testResponseEntity")
	public ResponseEntity<String> hello(String name) {
	    System.out.println("------testResponseEntity-------");
	    return ResponseEntity.ok()
	            .cacheControl(CacheControl.maxAge(30, TimeUnit.SECONDS).cachePrivate().cachePublic())
	            .eTag("OK")
	            .lastModified(Instant.parse("2019-11-01T00:00:00.00Z"))
	            .body("OK");
	    // 注意：这里添加的响应头是用来指导浏览器的，不会对服务端有影响
	    //      如果浏览器忽略返回的响应头，仍然实际发送请求，服务端会重复处理（相当于缓存机制失效）
	    // ShallowEtagHeaderFilter也是一样的，浏览器不配合是没有用的
	}
}
